﻿/// <summary>
/// 游戏初始化
/// </summary>
public class GameStateInit : GameStateBase {

    public override void Enter()
    {
        DebugInfo.Log("GameStateInit.Enter");

        GameDataKernel.inst.state = GameDataKernel.State.STATE_INIT;
        // 请求加入房间
        RequestJoinRoom();
    }

    public override void Leave()
    {
        DebugInfo.Log("GameStateInit.Leave");
    }

    /// <summary>
    /// 处理数据包
    /// </summary>
    /// <param name="message"></param>
    /// <returns></returns>
    public override bool ProcessPacket(IOMessage message)
    {
        switch (message.code)
        {
            case IOCmds.SMSG_JOIN_ROOM:
                UIRootController.inst.ShowMask(false);
                if (message.state == IOStates.STATE_OK)
                {
                    if (!NetIOController.inst.isGame)
                    {
                        //// 登录服务器发来的消息

                        // 收到游戏服务器地址和房间号
                        GameDataKernel.inst.roomId = message.args.GetInt("gsRoomId");
                        GameDataKernel.inst.servAddr = message.args.GetString("gsAddr");

                        // 连接到游戏服务器
                        UIRootController.inst.ShowMask(true);
                        NetIOController.inst.isGame = true;
                        NetIOController.inst.ConnectToNewURL(GameDataKernel.inst.servAddr);
                    }
                    else
                    {
                        ///// 游戏服务器发来的消息

                        // 游戏数据初始化完毕，可以显示游戏界面
                        GameProceduar.inst.InitUI();
                        GameDataKernel.inst.HandleMessage(message);

                        // 切换到等待状态
                        GameProceduar.inst.Switch(new GameStateWaiting());
                    }
                }
                return true;

            case IOCmds.WS_CONN_OPEN:
                // 与服务器的连接打开
                UIRootController.inst.ShowMask(false);

                if (NetIOController.inst.isGame)
                {
                    // 切换状态
                    if (GameDataKernel.inst.state == GameDataKernel.State.STATE_INIT)
                    {
                        GameDataKernel.inst.state = GameDataKernel.State.STATE_CONNECTED;
                    }

                    // 连接到游戏服务器，发送加入房间消息
                    RequestJoinRoom();
                }
                return true;

            case IOCmds.WS_CONN_CLOSED:
                // 连接失败或者/连接断开
                UIRootController.inst.ShowMask(true);
                NetIOController.inst.Connect(null);
                return true;
        }

        return base.ProcessPacket(message);
    }
}
